//给定一个 n 个元素有序的（升序）整型数组 nums 和一个目标值 target
// 写一个函数搜索 nums 中的 target，如果目标值存在返回下标，否则返回 -1

import java.util.Scanner;

public class test1 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] nums = new int[n];
        for (int i = 0; i < n; i++) {
            nums[i] = in.nextInt();
        }
        int target = in.nextInt();
        int result = search(nums,target);
        System.out.println(result);
    }

    //暴力解法
//    public static int search(int[] nums, int target) {
//        int flag = -1;
//        for (int i = 0; i < nums.length; i++) {
//            if(target==nums[i]){
//                flag = i;
//                break;
//            }
//        }
//        return flag;
//    }

    //二分查找
    public static int search(int[] nums, int target) {
        int left = 0,right = nums.length-1;
        while (left<=right){
            //int mid = (left+right+1)/2; //可能会溢出 当范围是2^32
            //优化: 先算出被left和right包含部分的长度,在找到长度为一般的位置,最后让left移动到一半的位置
            int mid = left+(right-left)/2;
            if(nums[mid]<target){
                left=mid+1;
            } else if (nums[mid]>target) {
                right=mid-1;
            }else {
                return mid;
            }
        }
        return -1;
    }
}
